public class Solution {
    public static void main(String[] args) {
        Solution s = new Solution();
        s.test();
    }

    // 1
    public void test() {
        /**
         * 基础位运算操作试验*/
        // 1 基础操作
        int a = 1;
        int b = 2;
        int c = 3;
        int d = 4;
        System.out.println("a&b:" + (a&b));
        System.out.println("a|b:" + (a|b));
        System.out.println("a^b:" + (a^b));
        System.out.println("a^b^c^d:" + (a^b^c^d));

        // 2 位图操作
        // -让一个数的二进制表示x位修改为1（方案：修改x为1，就直接 | 1<<x，因为|有1为1，同0为0，故仅会修改1）
        int num = 13;
        System.out.print("修改num二进制表示的第1位为1:");
        System.out.println(num | (1<<1));

        // -让一个数的二进制表示x位修改为0（方案：修改x为0，就直接 & ~（1<<x），因为&有0为0，同1为1，故仅会修改0）
        System.out.print("修改num二进制表示的第2位为0:");
        System.out.println(num & ~(1<<2));

        // 3 low bit操作
        // -获取一个数二进制表示最右侧的1
        System.out.println(b & -b);

        // -将最右侧的1修改为0
        System.out.println(num & (num-1));
    }
}
